<?php    if ( ! defined('DIR_ROOT')) exit(NO_SCRIPT_ALLOW_NOTICE);
/**
 * CK框架的核心程序，主要工作：加载相关配置、类和函数，并进行必要初始化,运行钩子/控制器,并最后输出
 * 
 * @author	terryhuang
 * @name	core.php
 * @version	1.0.0
 * @cTime	2010-12-31
 * @modify	
 */


/*解压全局配置变量*/
require_once(DIR_INCLUDE . '/constants.php');//常量定义文件
require_once(DIR_CONFIG . '/global.php');//全局设置文件
require_once(DIR_CONFIG . '/database.php');//数据库配置,包括缓存系统
global $ck_config , $ck_db_config;
/*转移字符相关*/
@set_magic_quotes_runtime(0); //取消自动转义

/*加载重要函数*/
require_once(DIR_INCLUDE . '/common.php');//框架重要函数
require_once(DIR_FUNCTION . '/common.php');//常用函数

/*设置时区*/
ini_set('date.timezone',$ck_config['time_zone']);


///*是否启用缓存输出*/
//if($ck_config['enable_cache'])
//{
//    //TODO 文件缓存或者memcache缓存
//    //TODO 查看memcache配置是否正常
//    /*打开缓存类*/
//	if($ck_config['cache_method'] == "memcache")
//	{	
//		if(is_port_ok($ck_db_config['memcache_option']['servers']))
//		{
//			$CACHE =& load_class('Memcached',TRUE , $ck_db_config['memcache_option']);
//		}
//	}
//	else
//	{
//		//TODO 文件缓存
//		$CATHE = NULL ;
//	}
//}

//if(!$CACHE->_active)
//{
//    logger('error','cache server is not running');
//}

/*初始化类*/
$VCache = & load_class('VarCache'); // 这是小数据缓存
$HOOKS =& load_class('Hooks');
$HOOKS->_call_hook('pre_system');
$URI =& load_class('URI');
$ROUTER =& load_class('Router');


/*缓存起来,方便以后使用输出内容*/
require(DIR_INCLUDE.'/Base5'.EXT);//加载CK_BASE类
load_class('Controller', FALSE);

/*加载指定类*/
if ( ! file_exists(DIR_CONTROLLER.'/'.$ROUTER->fetch_directory().$ROUTER->fetch_class().EXT))
{
	show_error('Unable to load your default controller.  Please make sure the controller specified in your Routes.php file is valid.');
}
include(DIR_CONTROLLER.'/'.$ROUTER->fetch_directory().$ROUTER->fetch_class().EXT);
$class  = $ROUTER->fetch_class();
$method = $ROUTER->fetch_method();
if ( ! class_exists($class)
	|| $method == 'controller'
	|| strncmp($method, '_', 1) == 0
	|| in_array(strtolower($method), array_map('strtolower', get_class_methods('Controller')))
	)
{
	show_404("{$class}/{$method}");
}

/*运行指定类的指定函数,特定地方有钩子*/
$HOOKS->_call_hook('pre_controller');

$CK = new $class();//运行controller构造函数

$HOOKS->_call_hook('post_controller_constructor');//构造函数后的钩子

/*检查指定的函数是否存在*/
if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($CK))))
{
	show_404("{$class}/{$method}");
}

call_user_func_array(array(&$CK, $method), array_slice($URI->rsegments, 2));//调用指定的controller函数，第二个参数为函数参数列表

$HOOKS->_call_hook('post_controller');//controller运行完了后的钩子

$HOOKS->_call_hook('post_system');
//TODO 关闭数据库连接
/*END*/

